﻿#pragma once
#include "zyCommandCtrol.h"

namespace DarkMoonUI {

	class zyListBox : public  zyCommandCtrol
	{
	public:
		zyListBox();
		~zyListBox();
		
		static LRESULT WINAPI zyListBox_ChildWndProc(zyObject* obj, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, BOOL* bHandle);

		BOOL 创建(HWND 参数_父窗口, const std::wstring& 参数_标题 = L"", POINT 参数_位置 = POINT{ 0, 0 }, POINT 参数_尺寸 = POINT{ 60, 120 },
			int 参数_ID = 0, int 参数_窗口风格 = 0, int 参数_扩展风格 = 0);
		BOOL 创建(zyWindow& 参数_父窗口, const std::wstring& 参数_标题 = L"", POINT 参数_位置 = POINT{ 0, 0 }, POINT 参数_尺寸 = POINT{ 60, 120 },
			int 参数_ID = 0, int 参数_窗口风格 = 0, int 参数_扩展风格 = 0);
		int 加入项目(const std::wstring& 参数_项目文本, int 参数_项目数值 = 0);
		int 插入项目(const std::wstring& 参数_内容, int 参数_插入位置 = -1, int 参数_项目数值 = 0);
		//@备注 删除指定项目。成功返回真，失败返回假。
		bool 删除项目(int 参数_项目索引) { return sendMsg(LB_DELETESTRING, 参数_项目索引, 0) != LB_ERR; }
		//@备注 删除列表框中的所有项目。成功返回真，失败返回假。
		bool 清空() { return sendMsg(LB_RESETCONTENT, 0, 0) != LB_ERR; }
		//@备注 本方法仅适用于单选列表框。在所有项目中寻找首部包含指定文本的项目，如找到，则选中它，并返回该项目的位置索引，否则返回 -1 。本命令仅在单选列表框中使用，如果在多选列表框中使用，将返回 -1 。
		int 选择项目文本(const std::wstring& 参数_欲选择的项目文本, int 参数_起始索引 = -1);
		//@备注 本方法仅适用于多选择列表框。选择指定项目索引的项目。成功返回真，失败返回假。
		bool 选择项目索引(int 参数_项目索引, bool 参数_是否选择 = true);
		//@备注 本方法仅适用于多选择列表框才能成功。选择指定起始点和结束点的项目。成功返回真，失败返回假。
		bool 选择多项(int 参数_起始索引, int 参数_结束索引, bool 参数_是否选择 = true);
		int 查找(const std::wstring& 参数_匹配文本, int 参数_起始索引 = -1);
		int 精确查找(const std::wstring& 参数_匹配文本, int 参数_起始索引 = -1);
		int 取现行选中项();
		int 置现行选中项(int 参数_项目索引);
		int 取项目数();
		int 取项目数值(int 参数_项目索引);
		bool 置项目数值(int 参数_项目索引, int 参数_数值 = 0);
		bool 是否被选择(int 参数_项目索引);
		int 取已选择项目数();
		int 取所有被选择项(std::vector<int>& 参数_索引数组);
		std::wstring 取项目文本(int 参数_项目索引);
		int 取顶端可见项();
		bool 置顶端可见项(int 参数_项目索引);
		int 取焦点项目();
		bool 置焦点项目(int 参数_项目索引);
		int 取项目高度();
		RECT 取项目矩形(int 参数_项目索引);
		bool 置项目高度(int 参数_高度);
		bool 置列宽度(int 参数_列宽度);
		int 取坐标项目(int 参数_横坐标, int 参数_纵坐标);
		//@备注 函数 整型 OnSelChange(HWND hWnd,整型 id)
		void 事件_列表项被选择(TRegEvent* 参数_事件指针) { SetRegEvent(L"OnSelChange", 参数_事件指针); }
		//@备注 函数 整型 OnItemDBClick(HWND hWnd,整型 id)
		void 事件_点击选择(TRegEvent* 参数_事件指针) { SetRegEvent(L"OnItemDBClick", 参数_事件指针); }
		//@备注 函数 整型 OnSelCancel(HWND hWnd,整型 id)
		void 事件_双击选择(TRegEvent* 参数_事件指针) { SetRegEvent(L"OnSelCancel", 参数_事件指针); }
	};

}

